//导入数据库操作模块
const db=require('../db/index')

//导入bcryptjs这个包
const bcrypt=require('bcryptjs')

//导入token包
const jwt=require('jsonwebtoken')


//导入全局配置文件
const config=require('../config')

//注册 处理函数
exports.reguser=(req,res)=>{
    //获取客户端提交到服务器的用户信息
    const userinfo=req.body
    
    // if(!userinfo.username || !userinfo.password){
    //     return res.send({status:1,message:'用户名或密码不合法！'})
    // }
    //select查到的是数组
    const sqlStr='select * from ev_users where username=?'
    db.query(sqlStr,userinfo.username,(err,results)=>{
        if(err) {
            //return res.send({status:1,message:err.message})
            return res.cc(err)
        }
        if(results.length > 0){
            //return res.send({status:1,message:'用户名已被占用！请更换'})
            return res.cc('用户名已被占用！请更换')
        }
        //调用bcrypt。hashSync（）对密码进行加密
        userinfo.password=bcrypt.hashSync(userinfo.password,10)
        console.log(userinfo)
        //TODO:用户名可以使用
        const sql='insert into ev_users set ?'
        db.query(sql,{username:userinfo.username,password:userinfo.password},(err,results)=>{
            if(err) return res.cc(err)
            //return res.send({status:1,message:err.message})
            //判断影响行数是否只为1行
            if(results.affectedRows !== 1) res.cc('注册用户失败，请稍后再试！')
            //return res.send({status:1,message:'注册用户失败，请稍后再试！'})
            //res.send({status:0,message:'注册成功'})
            res.cc('注册成功',0)
        })
    }) 
}

//登录 处理函数
exports.login=(req,res)=>{
    //接收表单数据
    const userinfo=req.body
    //定义sql语句
    const sql=`select * from ev_users where username=?`
    //执行sql语句根据用户名查询用户的信息
    db.query(sql,userinfo.username,(err,results)=>{
        if(err) return res.cc(err)
        //执行sql语句成功但获取到的数据条数不等于1
        if(results.length!==1) return res.cc('登录失败！')
        //TODO:判断密码是否正确
        //bcrypt.compareSync(用户提交密码，数据库存储的密码)
        const compareResult=bcrypt.compareSync(userinfo.password,results[0].password)
        if(!compareResult) return res.cc('登陆失败！')

        //TODO:在服务器端生成Token字符串

        const user={...results[0],password:'',user_pic:''}
        //对用户的信息进行加密，生成token字符串
        const tokenStr=jwt.sign(user,config.jwtSecretKey,{expiresIn:config.expiresIn})
        
        //res.send()将token响应给客户端
        res.send({
            status:0,
            message:'登录成功！',
            token:'Bearer '+tokenStr,
        })
    })
    
}